package com.zyong.design.pattern.template.case2;

/**
 * @program: zyong-design-pattern
 * @ClassName: AbstractSoyaMilk
 * @author: zyong
 * @create: 2024-04-27 11:15
 */
public abstract class AbstractSoyaMilk {
    /**
     * 模板方法
     * 定义为final，防止子类覆盖
     */
    public final void make() {
        select();
        add();
        soak();
        beat();
    }

    /**
     * 选材料
     */
    protected void select() {
        System.out.println("第一步：选择好的新鲜黄豆");
    }

    /**
     * 添加不同的配料，抽象方法，子类具体实现
     */
    protected abstract void add();

    protected void soak() {
        System.out.println("第三步：黄豆和配料开始浸泡，需要3小时");
    }

    protected void beat() {
        System.out.println("第四步：黄豆和配料放到豆浆机去打碎");
    }
}
